/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.integration;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.asportoonline.entities.Locale;
import org.asportoonline.entities.Prodotto;

/**
 *
 * @author fe
 */
@Stateless
public class ProdottoFacadeImplementation extends AbstractFacade<Prodotto> implements ProdottoFacade {
    @PersistenceContext(unitName = "AsportoOnline-ejbPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public ProdottoFacadeImplementation() {
        super(Prodotto.class);
    }
    
    public Prodotto findRestaurantProduct(String nome_prodotto, Locale locale) {
        Query query = em.createQuery("select p from Prodotto p where p.nome = :nome and p.locale = :locale");
        query.setParameter("nome", nome_prodotto);
        query.setParameter("locale", locale);
        List<Prodotto> lp = (List<Prodotto>)query.getResultList();
        
        if(lp==null || lp.isEmpty())    return null;
        return (Prodotto)lp.get(0);
    }
    
    public List<Prodotto> findAllRestaurantProducts(Locale locale) {
        Query query = em.createQuery("select p from Prodotto p where p.locale = :locale order by p.nome");
        query.setParameter("locale", locale);
        List<Prodotto> lp = (List<Prodotto>)query.getResultList();
        
        if(lp==null || lp.isEmpty())    return null;
        return lp;
    }
    

    public Prodotto find(long id) {
        Query query = em.createQuery("select p from Prodotto p where p.idProdotto = :idprod");
        query.setParameter("idprod", id);
        List<Prodotto> lp = (List<Prodotto>)query.getResultList();
        if(lp==null || lp.isEmpty())    return null;
        return (Prodotto)lp.get(0);        
    }
    
    @Override
    public void edit(Prodotto prodotto) {
        em.merge(prodotto);
    }

    public int numberRestaurantsWithProductsCategory(String nomeCategoria) {
        Query query = em.createQuery("select distinct p.locale from Prodotto p where p.categoria.nome = :nome");
        query.setParameter("nome", nomeCategoria);
        List<Prodotto> lp = (List<Prodotto>)query.getResultList();
        if(lp==null || lp.isEmpty())    return 0;
        return lp.size();                
    }

    public List<Locale> restaurantsWithProductsCategory(String nomeCategoria) {
        Query query = em.createQuery("select distinct p.locale from Prodotto p where p.categoria.nome = :nome");
        query.setParameter("nome", nomeCategoria);
        List<Locale> ll = (List<Locale>)query.getResultList();
        if(ll==null || ll.isEmpty())    return null;
        return ll;
    }

}
